Implement LWG2221: 'Formatted output for nullptr_t' Reviewed as: https://reviews.llvm.org/D63053 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@364802 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/ostream b/include/ostream index b20ac34..e6cf9c9 100644 --- a/include/ostream +++ b/include/ostream 
@@ -56,6 +56,7 @@  basic_ostream& operator<<(long double f);  basic_ostream& operator<<(const void* p);  basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb); + basic_ostream& operator<<(nullptr_t);    // 27.7.2.7 Unformatted output:  basic_ostream& put(char_type c); @@ -218,6 +219,10 @@  basic_ostream& operator<<(const void* __p);  basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);   + _LIBCPP_INLINE_VISIBILITY + basic_ostream& operator<<(nullptr_t) + { return *this << "nullptr"; } +  // 27.7.2.7 Unformatted output:  basic_ostream& put(char_type __c);  basic_ostream& write(const char_type* __s, streamsize __n); 
diff --git a/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/streambuf.pass.cpp b/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/streambuf.pass.cpp index daf5ba1..af41115 100644 --- a/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/streambuf.pass.cpp +++ b/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/streambuf.pass.cpp 
@@ -67,6 +67,13 @@  os << &sb2;  assert(sb.str() == "testing...");  } + { // LWG 2221 - nullptr + testbuf<char> sb; + std::ostream os(&sb); + os << nullptr; + assert(sb.str().size() != 0); + LIBCPP_ASSERT(sb.str() == "nullptr"); + }    return 0;  } 
diff --git a/www/cxx1z_status.html b/www/cxx1z_status.html index 94950de..5427d48 100644 --- a/www/cxx1z_status.html +++ b/www/cxx1z_status.html 
@@ -364,7 +364,7 @@ 	<tr><td></td><td></td><td></td><td></td></tr> 	<tr><td><a href="https://wg21.link/LWG2062">2062</a></td><td>Effect contradictions w/o no-throw guarantee of std::function swaps</td><td>Issaquah</td><td>Complete</td></tr> 	<tr><td><a href="https://wg21.link/LWG2166">2166</a></td><td>Heap property underspecified?</td><td>Issaquah</td><td></td></tr> -	<tr><td><a href="https://wg21.link/LWG2221">2221</a></td><td>No formatted output operator for nullptr</td><td>Issaquah</td><td></td></tr> +	<tr><td><a href="https://wg21.link/LWG2221">2221</a></td><td>No formatted output operator for nullptr</td><td>Issaquah</td><td>Complete</td></tr> 	<tr><td><a href="https://wg21.link/LWG2223">2223</a></td><td>shrink_to_fit effect on iterator validity</td><td>Issaquah</td><td>Complete</td></tr> 	<tr><td><a href="https://wg21.link/LWG2261">2261</a></td><td>Are containers required to use their 'pointer' type internally?</td><td>Issaquah</td><td></td></tr> 	<tr><td><a href="https://wg21.link/LWG2394">2394</a></td><td>locale::name specification unclear - what is implementation-defined?</td><td>Issaquah</td><td>Complete</td></tr>